/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jsf;

import bean.Encuesta;
import bean.pregunta8;
import com.icesoft.faces.component.panelpositioned.PanelPositionedEvent;
import dao.EncuestaDAO;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.naming.NamingException;
import org.icefaces.ace.model.table.RowStateMap;

/**
 *
 * @author cesardoncel
 */

@ManagedBean(name = "adminController")
@SessionScoped
public class EncuestaController {
    private Encuesta encuesta = new Encuesta();
    private Boolean p2Flag = true;
    private UIInput p2Field;
    private Boolean p4Flag = true;
    private UIInput p4Field;
    private RowStateMap stateMap = new RowStateMap();
    private RowStateMap stateMap2 = new RowStateMap();
    private Boolean page1 = true;
    private Boolean page2 = false;
    private Boolean page3 = false;
    private Boolean page4 = false;
    private Boolean isAdmin = false;
    private Boolean flagPaso = false;
    private Boolean flagPaso2 = false;
    private Boolean salir = false;
    private List<pregunta8> lspregunta8 = null;
    private List<Encuesta> lsEncuestados = null;
    private List<String> lsresp5 = null;
    
    static final String USR = "branStratAdmin";
    static final String PWD = "pwdbranStrat";
    private String usuario;
    private String contra = " ";
    private String errores = "";
    private String areaSOM = " ";
    private String areaIT = "";
    
    public void guardar() throws NamingException, SQLException{
        try{
        EncuestaDAO ed = new EncuestaDAO();
        Date d = new Date();                
        encuesta.setFecha(d);
        int x =1;
        int x2 =1;
        String p5 ="";
        //for (SelectItem si: getMultiRow()){
        for (String si : lsresp5){
            if (x<4)
                //p5 += si.getValue().toString() + " ";
                p5 += si + " ";
            x++;
        }
        encuesta.setP5(p5);
        //System.out.println("respuesta5= " + p5 );
        /*String p7 ="";
        for (SelectItem si: getMultiRow2()){
            if (x2<2)
                p7 += si.getValue().toString() + " ";
            x2++;
        }
        encuesta.setP7(p7);*/
        //System.out.println("respuesta7= " +  p7);
        String p8 ="";
        for (pregunta8 p : lspregunta8){
            p8 += p.getPuntaje() + " ";
        }
        encuesta.setP8(p8);
        ed.insertarEncuesta(encuesta);
        stateMap = new RowStateMap();
        stateMap2 = new RowStateMap();
        salir = true;
        page4 = false;
        encuesta = new Encuesta();
        } catch (Exception e){
            System.err.println("Error guardando encuesta. " + e.getMessage());
        }
    }
    
    public void ingreso(){
        try{
            if (usuario != null && usuario.equals(USR)){
                if(contra != null && contra.equals(PWD)){
                    System.out.println(usuario + " - " + contra);
                    isAdmin = true;
                    encontrarTodos();
                }
                
            }
        }catch (Exception e){
            System.err.println("Error ingresando. " + e.getMessage());
        }    
    }
    
    public void encontrarTodos(){
        try {
            EncuestaDAO ed = new EncuestaDAO();
            lsEncuestados = new ArrayList<Encuesta>();
            lsEncuestados.addAll(ed.findAll());
            /*for (Encuesta e1 : lsEncuestados){
                System.out.println("E1 " + e1.getP10a());
            }*/
            
        }catch (Exception e){
            System.err.println("Error encontrando todos. " + e.getMessage());
        } 
    }
    
    public void logout(){
        isAdmin = false;
        usuario = "";
        contra = "";
    }

    /**
     * @return the encuesta
     */
    public Encuesta getEncuesta() {
        if (encuesta== null)
            encuesta = new Encuesta();
        return encuesta;
    }

    /**
     * @param encuesta the encuesta to set
     */
    public void setEncuesta(Encuesta encuesta) {
        this.encuesta = encuesta;
    }
    public Collection<SelectItem> getSiNO() {
		List<SelectItem> siNo = new ArrayList<SelectItem>();
		try {
                    siNo.add(new SelectItem("Si", "Si"));
                    siNo.add(new SelectItem("No", "No"));

		} catch (Exception e) {
			e.getCause();
		}
		return siNo;
	}
    
    public Collection<SelectItem> getLsCompetencia() {
		List<SelectItem> lsCompetencia = new ArrayList<SelectItem>();
		try {
                    lsCompetencia.add(new SelectItem("01", "Más que la competencia"));
                    lsCompetencia.add(new SelectItem("02", "Igual que la competencia"));
                    lsCompetencia.add(new SelectItem("03", "Menos que la competencia"));

		} catch (Exception e) {
			e.getCause();
		}
		return lsCompetencia;
	}

    /**
     * @return the p2Flag
     */
    public Boolean getP2Flag() {
        return p2Flag;
    }

    /**
     * @param p2Flag the p2Flag to set
     */
    public void setP2Flag(Boolean p2Flag) {
        this.p2Flag = p2Flag;
    }

    /**
     * @return the p2Field
     */
    public UIInput getP2Field() {
        return p2Field;
    }

    /**
     * @param p2Field the p2Field to set
     */
    public void setP2Field(UIInput p2Field) {
        this.p2Field = p2Field;
    }
    public void p2Case(){
        setP2Flag(true);        
        if (getP2Field().getValue() != null && getP2Field().getValue().equals("Si")){
            setP2Flag(false);
        } else
            encuesta.setP2("");
    }
    
    public Collection<SelectItem> getLsP7() {
		List<SelectItem> lsP7 = new ArrayList<SelectItem>();
		try {
                   lsP7.add(new SelectItem("01","Estructura organizacional que ofrece respuestas rápidas y satisfactorias a sus clientes"));
                   lsP7.add(new SelectItem("02","Alta calidad en los procesos y productos/servicios que entregan al cliente"));
                   lsP7.add(new SelectItem("03","Reconocimiento en el mercado"));
                   lsP7.add(new SelectItem("04","Estilo directivo que fomenta el diálogo, creatividad y aprendizaje"));
                   lsP7.add(new SelectItem("05","Apoyo a las causas sociales"));
                   lsP7.add(new SelectItem("06","Uso ético y responsable de su poder"));
                   lsP7.add(new SelectItem("07","Fomentar la cultura empresarial"));
                   lsP7.add(new SelectItem("08", "Constante renovación en productos/servicios para clientes"));
                   lsP7.add(new SelectItem("09", "Preocupación por el bienestar de empleados"));
                   lsP7.add(new SelectItem("10", "Conciencia ambiental"));
                   lsP7.add(new SelectItem("11", "Establecen y cumplen objetivos de la empresa, de los empleados y sus clientes"));
		} catch (Exception e) {
			e.getCause();
		}
		return lsP7;
	}
    public Collection<SelectItem> getLsTiempo() {
		List<SelectItem> lsTiempo = new ArrayList<SelectItem>();
		try {
                   lsTiempo.add(new SelectItem("01","Menos de 1 año"));
                   lsTiempo.add(new SelectItem("02","Entre 1 y 2 años"));
                   lsTiempo.add(new SelectItem("03","Entre 2 años 1 día y 4 años"));
                   lsTiempo.add(new SelectItem("04","Entre 4 años 1 día y 6 años"));
                   lsTiempo.add(new SelectItem("05","Entre 6 años 1 día y 8 años"));
                   lsTiempo.add(new SelectItem("06","Entre 8 años y 1 día y 10 años"));
                   lsTiempo.add(new SelectItem("07","Más de 10 años"));
		} catch (Exception e) {
			e.getCause();
		}
		return lsTiempo;
	}
    public Collection<SelectItem> getLsArea() {
	
        List<SelectItem> lsArea = new ArrayList<SelectItem>();
        try {
            lsArea.add(new SelectItem("01","Comercial y mercadeo"));
            lsArea.add(new SelectItem("02","Financiero"));
            lsArea.add(new SelectItem("03","Servicio al cliente"));
            lsArea.add(new SelectItem("04","Gestión/Recursos "));
            lsArea.add(new SelectItem("05","humanos"));
        } catch (Exception e) {
                e.getCause();
        }
        return lsArea;
    }
    
    public List<String>  getLsp8(){
        List<String> lsp8 = new ArrayList<String>();
        lsp8.add("Respeto");
        lsp8.add("Compromiso");
        lsp8.add("Lealtad");
        lsp8.add("Honestidad");
        lsp8.add("Calidad");
        lsp8.add("Eficiencia");
        lsp8.add("Transparencia");
        lsp8.add("Confianza");
        lsp8.add("Social");
        return lsp8;
    }  
     public List<pregunta8>  getLspregunta8(){
        if (lspregunta8 == null){
            lspregunta8 = new ArrayList<pregunta8>();
            for (String s : getLsp8()){
                pregunta8 p = new pregunta8();
                p.setNombre(s);
                lspregunta8.add(p);
            }
        }
        return lspregunta8;
    }    
     public Collection<SelectItem> getLs1_8() {
		List<SelectItem> ls1_8 = new ArrayList<SelectItem>();
		try {
                    for (int i = 1 ; i <10; i++){
                        ls1_8.add(new SelectItem(""+i, ""+i));
                    }

		} catch (Exception e) {
			e.getCause();
		}
		return ls1_8;
	} 
    
     public Collection<SelectItem> getLs1_10() {
		List<SelectItem> ls1_10 = new ArrayList<SelectItem>();
		try {
                    for (int i = 1 ; i <11; i++){
                        ls1_10.add(new SelectItem(""+i, ""+i));
                    }

		} catch (Exception e) {
			e.getCause();
		}
		return ls1_10;
	}

    /**
     * @return the p4Flag
     */
    public Boolean getP4Flag() {
        return p4Flag;
    }

    /**
     * @param p4Flag the p4Flag to set
     */
    public void setP4Flag(Boolean p4Flag) {
        this.p4Flag = p4Flag;
    }

    /**
     * @return the p4Field
     */
    public UIInput getP4Field() {
        return p4Field;
    }

    /**
     * @param p4Field the p4Field to set
     */
    public void setP4Field(UIInput p4Field) {
        this.p4Field = p4Field;
    }
    
    public void p4Case(){
        setP4Flag(true);        
        if (getP4Field().getValue() != null && getP4Field().getValue().equals("Si")){
            setP4Flag(false);
        } else
            encuesta.setP4("");
    }    
    /**
     * @return the stateMap
     */
    public RowStateMap getStateMap() {
        return stateMap;
    }

    /**
     * @param stateMap the stateMap to set
     */
    public void setStateMap(RowStateMap stateMap) {
        this.stateMap = stateMap;
    }
    public ArrayList<SelectItem> getMultiRow() { 
        return (ArrayList<SelectItem>) stateMap.getSelected(); 
    }

    /**
     * @return the stateMap2
     */
    public RowStateMap getStateMap2() {
        return stateMap2;
    }

    /**
     * @param stateMap2 the stateMap2 to set
     */
    public void setStateMap2(RowStateMap stateMap2) {
        this.stateMap2 = stateMap2;
    }
    
    public ArrayList<SelectItem> getMultiRow2() { 
        return (ArrayList<SelectItem>) stateMap2.getSelected(); 
    }
    
    public Boolean valPaso(){
        errores = "";
        if (encuesta.getP1().equals("Si")){
            if (encuesta.getP2() == null || encuesta.getP2().isEmpty()){
                errores += ". Por favor responder la pregunta 2";
                return true;
            } else
                System.out.println("pasa1 " + encuesta.getP1());
        }
        if (encuesta.getP3().equals("Si")){
            if (encuesta.getP4() == null || encuesta.getP4().isEmpty()){
                errores += ". Por favor responder la pregunta 4";
                return true;
            } else
                System.out.println("pasa2 " + encuesta.getP3());
        }
        if (lsresp5.size()!=3){
            System.out.println("no pasa3 " + getMultiRow().size());
            errores += " En la pregunta 5 debe seleccionar 3 opciones";
            return true;
        }
        //if (getMultiRow2().size()!=1){
        if(encuesta.getP7() == null || encuesta.getP7().equals("")){
            errores += " En la pregunta 6 debe seleccionar una opcion";
            //stateMap2 = new RowStateMap();
            return true;
        }
        if (areaIT == null || areaIT.isEmpty()){
            if(areaSOM == null || areaSOM.isEmpty()){
               errores += " La información laboral es requerida";
               return true;
            } else {
                encuesta.setArea(areaSOM);
            }
        } else {
                encuesta.setArea(areaIT);
            }
        return false;
    }
    
    public Boolean valPaso2(){
        errores = "";
        pregunta8 pi = new pregunta8();
        pregunta8 pf = new pregunta8();
        int ls8size = lspregunta8.size();
        if (ls8size > 0){
            for (int x = 0; x<ls8size; x++){
                    pi = lspregunta8.get(x);
                for (int y = x+1; y<ls8size; y++){
                    pf = lspregunta8.get(y);            
                    //System.out.println("parejas: " + pi.getPuntaje() + " - " + pf.getPuntaje());
                    if(pi.getPuntaje().equals(pf.getPuntaje())){
                        errores += " En la pregunta 7 deben elegirse valores diferentes";
                        return true;
                    }    
                }
            }
        }
        
        
        return false;
    }        
    
    public void pagina1(){
        
        page1 = true;
        page2 = false;
        page3 = false;
        page4 = false;
        salir = false;
    }
    
     public void pagina2(){
        flagPaso = false;
        flagPaso = valPaso();
        if (flagPaso){
            stateMap = new RowStateMap();
            stateMap2 = new RowStateMap();
            pagina1();            
        } else{
            page1 = false;
            page2 = true;
            page3 = false;
            page4 = false;
            salir = false;
        }
    }
     
    public void pagina3(){
        flagPaso2 = false;
        flagPaso2 = valPaso2();
        if (flagPaso2){            
            page2 = true;
            page3 = false;             
        } else{
            page1 = false;
            page2 = false;
            page3 = true;
            page4 = false;
            salir = false;
        }
    } 
    public void pagina4(){
        page1 = false;
        page2 = false;
        page3 = false;
        page4 = true;
        salir = false;
    } 

    /**
     * @return the page1
     */
    public Boolean getPage1() {
        return page1;
    }

    /**
     * @param page1 the page1 to set
     */
    public void setPage1(Boolean page1) {
        this.page1 = page1;
    }

    /**
     * @return the page2
     */
    public Boolean getPage2() {
        return page2;
    }

    /**
     * @param page2 the page2 to set
     */
    public void setPage2(Boolean page2) {
        this.page2 = page2;
    }

    /**
     * @return the page3
     */
    public Boolean getPage3() {
        return page3;
    }

    /**
     * @param page3 the page3 to set
     */
    public void setPage3(Boolean page3) {
        this.page3 = page3;
    }

    /**
     * @return the page4
     */
    public Boolean getPage4() {
        return page4;
    }

    /**
     * @param page4 the page4 to set
     */
    public void setPage4(Boolean page4) {
        this.page4 = page4;
    }

    /**
     * @return the lsEncuestados
     */
    public List<Encuesta> getLsEncuestados() {
        return lsEncuestados;
    }

    /**
     * @param lsEncuestados the lsEncuestados to set
     */
    public void setLsEncuestados(List<Encuesta> lsEncuestados) {
        this.lsEncuestados = lsEncuestados;
    }

    /**
     * @return the isAdmin
     */
    public Boolean getIsAdmin() {
        return isAdmin;
    }

    /**
     * @param isAdmin the isAdmin to set
     */
    public void setIsAdmin(Boolean isAdmin) {
        this.isAdmin = isAdmin;
    }

    /**
     * @return the usuario
     */
    public String getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the contra
     */
    public String getContra() {
        return contra;
    }

    /**
     * @param contra the contra to set
     */
    public void setContra(String contra) {
        this.contra = contra;
    }

    /**
     * @return the flagPaso
     */
    public Boolean getFlagPaso() {
        return flagPaso;
    }

    /**
     * @param flagPaso the flagPaso to set
     */
    public void setFlagPaso(Boolean flagPaso) {
        this.flagPaso = flagPaso;
    }

    /**
     * @return the errores
     */
    public String getErrores() {
        return errores;
    }

    /**
     * @param errores the errores to set
     */
    public void setErrores(String errores) {
        this.errores = errores;
    }

    /**
     * @return the areaSOM
     */
    public String getAreaSOM() {
        return areaSOM;
    }

    /**
     * @param areaSOM the areaSOM to set
     */
    public void setAreaSOM(String areaSOM) {
        this.areaSOM = areaSOM;
    }

    /**
     * @return the areaIT
     */
    public String getAreaIT() {
        return areaIT;
    }

    /**
     * @param areaIT the areaIT to set
     */
    public void setAreaIT(String areaIT) {
        this.areaIT = areaIT;
    }

    /**
     * @return the salir
     */
    public Boolean getSalir() {
        return salir;
    }

    /**
     * @param salir the salir to set
     */
    public void setSalir(Boolean salir) {
        this.salir = salir;
    }

    /**
     * @return the flagPaso2
     */
    public Boolean getFlagPaso2() {
        return flagPaso2;
    }

    /**
     * @param flagPaso2 the flagPaso2 to set
     */
    public void setFlagPaso2(Boolean flagPaso2) {
        this.flagPaso2 = flagPaso2;
    }

    /**
     * @return the lsresp5
     */
    public List<String> getLsresp5() {
        return lsresp5;
    }

    /**
     * @param lsresp5 the lsresp5 to set
     */
    public void setLsresp5(List<String> lsresp5) {
        this.lsresp5 = lsresp5;
    }
}
